/* Copyright  2009-2010
   @Author
   Richard Changde Yin            e-mail yinchangde@hotmail.com

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; version 2 of the License.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */

/**
 * @filename: select_insert.h
 */

#ifndef __SELECT_INSERT_H__
#define __SELECT_INSERT_H__

class select_insert :public select_result_interceptor {
 public:

  TableList *table_list;
  Table *table;
  List<Item> *fields;
  // autogenerated or not
  uint64_t autoinc_value_of_last_inserted_row;

  COPY_INFO info;

  bool insert_into_view;

  select_insert(TableList *table_list_par,
                Table *table_par, List<Item> *fields_par,
                List<Item> *update_fields, List<Item> *update_values,
                enum_duplicates duplic, bool ignore);
  ~select_insert();
  int prepare(List<Item> &list, Select_Lex_Unit *u);

  virtual int prepare2(void);

  bool send_data(List<Item> &items);

  virtual void store_values(List<Item> &values);

  virtual bool can_rollback_data() { return 0; }

  void send_error(uint32_t errcode,const char *err);

  bool send_eof();

  void abort();
  /* not implemented: select_insert is never re-used in prepared statements */
  void cleanup();
};

#endif /* __SELECT_INSERT_H__ */
